"""
配置文件
"""
import os
from datetime import timedelta
from pathlib import Path

# 基础路径配置
BASE_DIR = Path(__file__).resolve().parent
DATA_DIR = BASE_DIR / "data"
PDF_DIR = DATA_DIR / "pdfs"
LOG_DIR = DATA_DIR / "logs"
VECTOR_DIR = DATA_DIR / "vectors"

# 确保目录存在
for dir_path in [DATA_DIR, PDF_DIR, LOG_DIR, VECTOR_DIR]:
    dir_path.mkdir(parents=True, exist_ok=True)

# 文档处理配置
DOC_CONFIG = {
    'chunk_size': 500,  # 文本块大小
    'chunk_overlap': 50,  # 文本块重叠大小
}

# 向量数据库配置
VECTOR_DB_CONFIG = {
    'collection_name': 'enterprise_kb',
    'dimension': 384,  # paraphrase-multilingual-MiniLM-L12-v2 模型的输出维度是384
    'metric_type': 'L2',  # 距离度量方式
    'index_type': 'HNSW',  # 索引类型，Milvus Lite支持FLAT/HNSW/AUTOINDEX
    'index_params': {
        'M': 8,  # HNSW图中每个节点的最大边数
        'efConstruction': 64  # 构建时的搜索深度
    },
    'search_params': {
        'ef': 32  # 搜索时的候选集大小
    }
}

# 模型配置
MODEL_CONFIG = {
    'embedding_model': 'paraphrase-multilingual-MiniLM-L12-v2',  # 支持中英文的轻量级模型
    'llm_model': 'qwen-max',  # 通义千问模型
    'temperature': 0.7,
    'top_p': 0.8,
    'max_tokens': 1500,
    'max_docs_per_query': 3,  # 每次查询返回的最大文档数
}

# 系统配置
SYSTEM_CONFIG = {
    'session_expire_minutes': 30,  # 会话过期时间
    'max_retries': 3,  # API调用最大重试次数
    'retry_delay': 1,  # 重试间隔（秒）
    'session_cleanup_interval': timedelta(minutes=5),  # 会话清理间隔
    'max_history_len': 10,  # 最大历史记录长度
    'session_timeout': 3600,  # 会话超时时间（秒）
}

# 日志配置
LOG_CONFIG = {
    'filename': LOG_DIR / 'qa_system.log',
    'max_bytes': 10 * 1024 * 1024,  # 10MB
    'backup_count': 5,
    'log_format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    'console_level': 'INFO',
    'file_level': 'DEBUG'
}

# RAG 配置
RAG_CONFIG = {
    'max_docs_per_query': 5,  # 每次查询返回的文档数
    'min_similarity_score': 0.3,  # 最小相似度阈值
    'context_window': 2,  # 上下文窗口大小（前后各取几个段落）
    'max_context_length': 4000,  # 最大上下文长度
}
